package cn.csxw.openchina.utils;

import android.app.Activity;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;

import android.hardware.SensorEventListener2;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;

import cn.csxw.openchina.R;
import cn.csxw.openchina.ui.activity.ShakeActivity;

/**
 * 摇一摇功能界面工具和介绍:
 * 在手机上主要三个坐标 X Y Z
 * X:X轴水平和指向是正确的
 * Y：y轴从行和指向是正确的
 * Z:指向屏幕正面的外面  坐标在屏幕后面有负值
 * 源码说：api 2d  坐标的原点在左上角 这话不懂什么意思  不是一直都在左上角么？
 * 主要类有：SensorManager SensorEvent Sensor
 * <p>
 * 运用的一下类不变量：Sensor.TYPE_ACCELEROMETER  加速度的传感器 都是国际单位法
 * 三个左边的表示法：<li> values[0]: Acceleration minus Gx on the x-axis </li>
 * <li> values[1]: Acceleration minus Gy on the y-axis </li>
 * <li> values[2]: Acceleration minus Gz on the z-axis </li>
 * Sensor.TYPE_ACCELEROMETER  加速度的传感器  这里的值为9.81m/s^2
 */

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public class ShakeUtil implements SensorEventListener2 {
    private Activity activity;

    public ShakeUtil(Activity activity) {
        super();
        this.activity = activity;
    }

    @Override//刷新改变结束时调用的方法
    public void onFlushCompleted(Sensor sensor) {

    }

    @Override//刷新改变调用的方法
    public void onSensorChanged(SensorEvent event) {
        //主要是你想要跟什么做比较  例如和加速度 或者磁场
        int sensorType = event.sensor.getType();
        //values[0]:X轴，values[1]：Y轴，values[2]：Z轴
        float[] values = event.values;
        if (sensorType == Sensor.TYPE_ACCELEROMETER) {
             /*正常情况下，任意轴数值最大就在9.8~10之间，只有在突然摇动手机
              的时候，瞬时加速度才会突然增大或减少。   监听任一轴的加速度大于17即可
            */
            if ((Math.abs(values[0]) > 17) || Math.abs(values[1]) > 17
                    || Math.abs(values[2]) > 17) {

                //int enterAnim, int exitAnim
                activity.overridePendingTransition(R.anim.zoom_out_enter,
                        R.anim.zoom_exit_enter);
                //检测到晃动后启动OPenDoor效果
                Global.showToast("摇一摇了");
                Intent intent = new Intent(activity, ShakeActivity.class);
                activity.startActivity(intent);
                activity.finish();
            }
        }
    }
    @Override//精度改变调用的方法
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}
